muxer: force muxer dispoal as part of widget dispose
authorChristian Hergert <chergert@redhat.com>
Wed, 25 Mar 2020 21:02:59 +0000 (14:02 -0700)
committerChristian Hergert <chergert@redhat.com>
Wed, 25 Mar 2020 21:02:59 +0000 (14:02 -0700)
We need to cleanup state here immediately so that we do not potentially
access the g_class private data after it been finalized. This ensures that
the borrowed reference is dropped by the muxer.

gtk/gtkactionmuxer.c
gtk/gtkwidget.c

index 303d26e7387f4f46abba7b5a71b880b4bfcc2012..26ca311efc5369bfd5ebf30f905389aa0d4d1806 100644 (file)
@@ -858,6 +858,8 @@ gtk_action_muxer_dispose (GObject *object)
 
   g_hash_table_remove_all (muxer->observed_actions);
 
+  muxer->widget = NULL;
+
   G_OBJECT_CLASS (gtk_action_muxer_parent_class)
     ->dispose (object);
 }
index 6d25c73357490f445374fb2e6521dc67081fe1b1..48ead879f06e35e2b4f4841742e9fff7579be217 100644 (file)
@@ -7357,6 +7357,11 @@ gtk_widget_dispose (GObject *object)
   GtkWidget *widget = GTK_WIDGET (object);
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
   GSList *sizegroups;
+  GtkActionMuxer *muxer;
+
+  muxer = g_object_get_qdata (G_OBJECT (widget), quark_action_muxer);
+  if (muxer != NULL)
+    g_object_run_dispose (G_OBJECT (muxer));
 
   if (priv->children_observer)
     gtk_list_list_model_clear (priv->children_observer);